학습목표

    1. 다음 뉴스와 그 뉴스의 댓글 크롤링하기
In [1]:
import requests
from bs4 import BeautifulSoup

뉴스 제목 크롤링

In [2]:
def get_daum_news_title(news_id):
    url = 'https://news.v.daum.net/v/{}'.format(news_id)
    resp = requests.get(url)
    
    soup = BeautifulSoup(resp.text)
    
    title_tag = soup.select_one('h3.tit_view')
    if title_tag:
        return title_tag.get_text()
    return ""
In [3]:
get_daum_news_title('20190728165812603')
Out[3]:
'일론머스크 "테슬라에서 넷플릭스·유튜브 즐길 날 온다"'
In [4]:
get_daum_news_title('20190801114158041')
Out[4]:
'5G 2∼3위 경쟁 치열..LGU+, 6월 가입자 순증 KT 앞서'

뉴스 본문 크롤링

In [5]:
def get_daum_news_content(news_id):
    url = 'https://news.v.daum.net/v/{}'.format(news_id)
    resp = requests.get(url)
    
    soup = BeautifulSoup(resp.text)
    
    content = ''
    for p in soup.select('div#harmonyContainer p'):
        content += p.get_text()
    return content
In [6]:
get_daum_news_content('20190728165812603')
Out[6]:
'[아시아경제 이민우 기자] 일론 머스크 테슬라 최고경영자(CEO)가 자사 전기 자동차 모델에 넷플릭스와 유튜브 등 온라인동영상서비스(OTT)를 탑재할 것이라고 예고했다. 단순히 자율 주행 전기차가 단순히 주행을 위한 정보를 알려주는 것을 넘어 각종 영상 콘텐츠를 즐기는 공간으로도 확장하겠다는 전략으로 풀이된다.27일(현지시간) 더버지 등 주요 외신들에 따르면 머스크 CEO는 자신의 트위터를 통해 이 같은 계획을 밝혔다. 그는 "자동차가 정차했을 때 넷플릭스와 유튜브를 감상할 수 있는 기능이 조만간 추가될 것"이라며 "편안한 좌석과 서라운드 사운드 오디오를 통해 영화관과 같은 느낌을 받을 수 있을 것"이라고 강조했다.테슬라가 이처럼 콘텐츠 방면으로 확장하려 든 것은 이번이 처음이 아니다. 지난달 세계 최대 게임쇼 E3에서는 이미 운전자가 \'폴아웃 쉘터\'라는 게임을 할 수 있을 것이라고 발표한 바 있다. 이후에도 최근 게임업체 아타리사(社)의 자동차 경주 게임 ‘폴포지션’, 슈팅게임 ‘템페스트’, ‘미사일커맨드’ 등 고전 게임을 제공하기도 했다. 운전대로 게임을 조작하는 방식으로, 차가 주차돼 있을 경우에만 즐길 수 있다.이번 영상 콘텐츠는 주행 중에도 감상할 수 있도록 하는 방안을 고려하고 있다. 테슬라 측은 규제당국이 자율주행에 대해 완전히 승인하면 차량이 움직일 때에도 승객이 동영상을 즐길 수 있을 것이라고 설명했다.하지만 아직까지 자율주행차의 안전에 대한 우려는 완전히 걷혀지지 않은 상황이다. 지난 2017년 차량공유 서비스 우버의 자율주행 시범차량이 보행자와 충돌한 사고가 발생한 바 있다. 게다가 당시 시험 운전자는 디즈니의 동영상 스트리밍 서비스인 \'훌루\'를 이용하고 있던 것으로 밝혀졌다.이민우 기자 letzwin@asiae.co.kr<ⓒ경제를 보는 눈, 세계를 보는 창 아시아경제 무단전재 배포금지>'
In [7]:
get_daum_news_content('20190801114158041')
Out[7]:
'(서울=연합뉴스) 채새롬 기자 = LG유플러스가 6월 한 달간 KT보다 5G 가입자 순증 수가 더 많았던 것으로 집계됐다.1일 과학기술정보통신부와 통신업계에 따르면 6월 말 기준 국내 5G 가입자는 133만 6천865명으로 한 달간 55만2천650명이 늘어났다.통신사별로는 SK텔레콤이 53만346명, KT가 41만9천316명, LG유플러스가 38만7천203명이었다. SK텔레콤의 점유율은 5월 40.8%에서 6월 39.7%, KT는 32.1%에서 31.4%로 다소 줄어든 반면 LG유플러스는 점유율이 27.1%에서 29.0%로 늘었다. 5대 3대 2 구도에서 4대 3대 3 구도가 고착화하는 양상이다.특히 LG유플러스는 월별 순증 가입자 기준 KT를 처음으로 앞질렀다. KT가 6월 16만7천775명 증가한 데 비해 LG유플러스는 17만4천505명을 늘렸다. SK텔레콤은 21만370명을 모집했다.이에 따라 5월 5%포인트였던 LG유플러스와 KT의 점유율 차는 6월 2.4%포인트로 좁혀졌다.6월 공격적인 마케팅을 펼친 LG유플러스가 마케팅 재원이 바닥나자 경쟁사 발목 잡기에 나섰다는 지적도 제기된다. LG유플러스는 지난달 24일 방송통신위원회에 SK텔레콤과 KT를 불법 보조금 살포 혐의로 신고했다.업계 관계자는 "KT와 LG유플러스의 가입자 순증 격차가 좁혀짐에 따라 양사가 3위로 떨어지지 않기 위해 갤럭시노트10이 나오는 8월 치열한 마케팅 싸움을 전개할 것으로 보인다"고 말했다.다음 달 삼성전자 갤럭시노트10 출시를 앞두고 이통사들은 일찌감치 프로모션을 발표하며 5G 가입자 유치 전에 나서고 있다. 7월말 현재 5G 가입자는 180만명 수준으로 파악된다. SK텔레콤 점유율이 41%, KT 31%, LG유플러스 28% 수준으로 알려졌다. 업계에서는 갤럭시노트10이 출시되는 8월 5G 가입자가 200만명을 넘기고 9월부터 갤럭시A90, 갤럭시 폴드, LG전자 5G 스마트폰 등이 출시되면 연말 5G 가입자가 400만명을 넘기리라는 예상이 나온다. SK텔레콤은 1일 5G 가입자 80만명을 넘길 것으로 관측된다. 국내 5G 가입자가 5∼6월 약 100만명 순증하는 동안 LTE 가입자는 약 32만명이 감소해 5G 가입자 이동이 가속화되고 있다. 6월 5G 데이터트래픽은 약 24GB(23,988MB)로 전월 대비 약 28% 늘었다.srchae@yna.co.kr저작권자(c)연합뉴스. 무단전재-재배포금지'

뉴스 댓글 크롤링

In [10]:
url = 'https://comment.daum.net/apis/v1/posts/@20190728165812603/comments?parentId=0&offset=43&limit=10&sort=RECOMMEND&isInitial=false'
headers = {
        'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJncmFudF90eXBlIjoiYWxleF9jcmVkZW50aWFscyIsInNjb3BlIjpbXSwiZXhwIjoxNTY0Njc4NjQ1LCJhdXRob3JpdGllcyI6WyJST0xFX0NMSUVOVCJdLCJqdGkiOiJlZGUxNzM0MS1hNWNjLTRmYmQtODJkMy0zZTMwOGMwMGViZTEiLCJjbGllbnRfaWQiOiIyNkJYQXZLbnk1V0Y1WjA5bHI1azc3WTgifQ.Cxs2g1hUUAjyuSrUDAhaKGol8vvyW-_mwPtV0X0DvEU',
        'Origin': 'https://news.v.daum.net',
        'Referer': 'https://news.v.daum.net/v/20190728165812603',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
In [20]:
resp = requests.get(url, headers=headers)
In [16]:
def get_daum_news_comments(news_id):
    headers = {
        'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJncmFudF90eXBlIjoiYWxleF9jcmVkZW50aWFscyIsInNjb3BlIjpbXSwiZXhwIjoxNTY0Njc4NjQ1LCJhdXRob3JpdGllcyI6WyJST0xFX0NMSUVOVCJdLCJqdGkiOiJlZGUxNzM0MS1hNWNjLTRmYmQtODJkMy0zZTMwOGMwMGViZTEiLCJjbGllbnRfaWQiOiIyNkJYQXZLbnk1V0Y1WjA5bHI1azc3WTgifQ.Cxs2g1hUUAjyuSrUDAhaKGol8vvyW-_mwPtV0X0DvEU',
        'Origin': 'https://news.v.daum.net',
        'Referer': 'https://news.v.daum.net/v/20190728165812603',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }
    
    url_template = 'https://comment.daum.net/apis/v1/posts/@{}/comments?parentId=0&offset={}&limit=10&sort=RECOMMEND&isInitial=false'
    offset = 0
    comments = []
    while True:
        url = url_template.format(news_id, offset)
        resp = requests.get(url, headers=headers)
        data = resp.json()
        if not data:
            break
            
        comments.extend(data)
        offset += 10
        
    return comments
In [ ]:
len(get_daum_news_comments('20190728165812603'))
In [ ]:
len(get_daum_news_comments('20190801114158041'))